/********************************************************************/
/*  Hochschule für Technik und Wirtschaft							*/
/*  Fachbereich GIS													*/
/*  Hardware-Labor													*/
/*  Mikroprozessortechnik											*/
/********************************************************************/
/*                                                       		    */
/*  C_Übung.C:			 	  										*/
/*		Programmrumpf für C-Programme mit dem Keil					*/
/*		Entwicklungsprogramm uVision3 für ARM-Mikrocontroller		*/
/*                                                       		    */
/********************************************************************/
/*	Aufgaben-Nr.:			* 4.1.1							        */
/*              			*										*/
/********************************************************************/
/* 	Gruppen-Nr.: 			*										*/
/*              			*										*/
/********************************************************************/
/*	Name / Matrikel-Nr.:    * Christoph Zell      ()                */
/*              			* Benjamin  Friedrich (3453464)    	    */
/*              			*										*/
/********************************************************************/
/* 	Abgabedatum:            * 22.01.2009 						    */
/*          	    		*										*/
/********************************************************************/

#include "lpc21xx.h"		/* LPC21xx Definitionen 				*/

/********************************************************************/
/* 	Funktion:    	main		               	       	   		  	*/
/* 	Beschreibung:	Hauptprogramm	          	           		  	*/
/********************************************************************/
/* 	Eingangsparameter:	kein										*/
/* 	Ausgabeparameter:	kein	  	     				 			*/
/* 	Rückgabewert:		kein	   						    		*/
/********************************************************************/

/*
  Ausgabe-Bits:
  -------------
  a - P0.18
  b - P0.19
  c - P0.20
  d - P0.21
  e - P0.22
  f - P0.23
  g - P0.24
*/
//----------------------- bit: gfed cba
#define SEGMENT_0 0x7C0000  // 0111 1100 0000 0000 0000 0000
#define SEGMENT_1 0x0C0000  // 0000 1100 0000 0000 0000 0000
#define SEGMENT_2 0xB60000  // 1011 0110 0000 0000 0000 0000
#define SEGMENT_3 0x9E0000  // 1001 1110 0000 0000 0000 0000
#define SEGMENT_4 0xCC0000  // 1100 1100 0000 0000 0000 0000
#define SEGMENT_5 0xDA0000  // 1101 1010 0000 0000 0000 0000
#define SEGMENT_6 0xF80000  // 1111 1000 0000 0000 0000 0000
#define SEGMENT_7 0x0E0000  // 0000 1110 0000 0000 0000 0000
#define SEGMENT_8 0xFE0000  // 1111 1110 0000 0000 0000 0000
#define SEGMENT_9 0xDE0000  // 1101 1110 0000 0000 0000 0000


/*
#define SEGMENT_0 0x0FC0000
#define SEGMENT_1 0x00C0000
#define SEGMENT_2 0x16C0000
#define SEGMENT_3 0x13C0000
#define SEGMENT_4 0x18C0000
#define SEGMENT_5 0x1B40000
#define SEGMENT_6 0x1F40000
#define SEGMENT_7 0x09C0000
#define SEGMENT_8 0x1FC0000
#define SEGMENT_9 0x1BC0000
*/

/*
 * Eingabe-Bits:
 *  -------------
 *  Bit3 = P0.13
 *  Bit2 = P0.12
 *  Bit1 = P0.11
 *  Bit0 = P0.10
 */
//------------------- bit: 3 210
#define BCD_0 0x0    // 0000 0000 0000 0000
#define BCD_1 0x0200 // 0000 0010 0000 0000
#define BCD_2 0x0400 // 0000 0100 0000 0000
#define BCD_3 0x0600 // 0000 0110 0000 0000
#define BCD_4 0x0800 // 0000 1000 0000 0000
#define BCD_5 0x0A00 // 0000 1010 0000 0000
#define BCD_6 0x0C00 // 0000 1100 0000 0000
#define BCD_7 0x0E00 // 0000 1110 0000 0000
#define BCD_8 0x1000 // 0001 0000 0000 0000
#define BCD_9 0x1200 // 0001 0010 0000 0000


void main (void)
{
	unsigned long input  = 0;
	unsigned long output = 0;
	IODIR0               = SEGMENT_8;/* P0.18 - P0.24 als Ausgang definieren */

	while (1) /* Endlos-Hauptschleife */
	{
		IOCLR0 = output; // Deaktiviere letzte Output-Bits
		input  = IOPIN0; // IOPIN0 lesen
		output = 0;		 // setze Output für nächste Verarbeitung zurück

		switch(input)
		{
			case BCD_0: output = SEGMENT_0; break;
			case BCD_1: output = SEGMENT_1; break;
			case BCD_2: output = SEGMENT_2; break;
			case BCD_3: output = SEGMENT_3; break;
			case BCD_4: output = SEGMENT_4; break;
			case BCD_5: output = SEGMENT_5; break;
			case BCD_6: output = SEGMENT_6; break;
			case BCD_7: output = SEGMENT_7; break;
			case BCD_8: output = SEGMENT_8; break;
			case BCD_9: output = SEGMENT_9; break;
		}

	    IOSET0 = output; /* Aktivieren der entsprechenden BITs*/
	}
}
